package main

import "fmt"

/*
	螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ，请按照 顺时针螺旋顺序 ，返回矩阵中的所有元素。
输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出：[1,2,3,6,9,8,7,4,5]
 */

func spiralOrder(matrix [][]int) []int {
	res := make([]int, 0)  // 结果
	left, right := 0, len(matrix[0])  // 左右边界
	up, down := 0, len(matrix)     // 上下边界

	length := right * down
	for {
		// 从左向右遍历
		for i := left; i < right; i ++ {
			res = append(res, matrix[up][i])
		}
		right --
		// 从上到下遍历
		for i := up + 1; i < down; i ++ {
			res = append(res, matrix[i][right])
		}
		down --
		// 从右向左遍历
		for i := right - 1; i >= left; i -- {
			res = append(res, matrix[down][i])
		}
		up ++
		// 从下到上遍历
		for i := down - 1; i >= up; i -- {
			res = append(res, matrix[i][left])
		}
		left ++
		if len(res) == length {
			break
		}
	}
	return res
}

func main() {
	fmt.Println(spiralOrder([][]int{{1,2,3},{4,5,6},{7,8,9}}))
}
